package com.basker.pisces.excel;

import java.io.File;
import java.io.IOException;
import java.io.OutputStream;

/**
 * 操作excel工作簿的接口
 *
 * @author hangwen
 */
public interface IWorkBook {

    /**
     * 创建一个sheet
     *
     * @param sheetName
     */
    void addSheet(String sheetName);

    /**
     * 获取单元格的值
     *
     * @param sheetIndex
     * @param rowIndex
     * @param columnIndex
     * @return
     * @throws IllegalArgumentException sheetIndex越界会抛出此异常
     */
    Object getCellValue(int sheetIndex, int rowIndex, int columnIndex);

    /**
     * 获取单元格的值
     *
     * @param sheetName
     * @param rowIndex
     * @param columnIndex
     * @return
     * @throws IllegalArgumentException sheetName不存在的话会抛出此异常
     */
    Object getCellValue(String sheetName, int rowIndex, int columnIndex);

    /**
     * 获取指定sheet的第一行行号，从0开始
     *
     * @param sheetIndex
     * @return
     * @throws IllegalArgumentException sheetIndex越界会抛出此异常
     */
    int getFirstRowNum(int sheetIndex);

    /**
     * 获取指定sheet的第一行行号，从0开始
     *
     * @param sheetName
     * @return
     * @throws IllegalArgumentException sheetName不存在的话会抛出此异常
     */
    int getFirstRowNum(String sheetName);

    /**
     * 获取指定sheet的最后一行行号，从0开始
     *
     * @param sheetIndex
     * @return
     * @throws IllegalArgumentException sheetIndex越界会抛出此异常
     */
    int getLastRowNum(int sheetIndex);

    /**
     * 获取指定sheet的最后一行行号，从0开始
     *
     * @param sheetName
     * @return
     * @throws IllegalArgumentException sheetName不存在的话会抛出此异常
     */
    int getLastRowNum(String sheetName);

    /**
     * 获取sheet的数量
     *
     * @return
     */
    int getSheetCount();

    /**
     * 获取指定sheet的名称
     *
     * @param sheetIndex
     * @return
     * @throws IllegalArgumentException sheetIndex越界会抛出此异常
     */
    String getSheetName(int sheetIndex);

    /**
     * 获取所有sheet页的名称
     *
     * @return
     */
    String[] getSheetNames();

    /**
     * 将excel工作簿保存到指定文件
     *
     * @param file
     */
    void save(File file) throws IOException;

    /**
     * 将excel工作簿保存到指定输出流
     *
     * @param outputStream
     */
    void save(OutputStream outputStream) throws IOException;

    /**
     * 设置单元格
     *
     * @param sheetIndex
     * @param cell
     * @throws IllegalArgumentException sheetIndex越界会抛出此异常
     */
    void setCell(int sheetIndex, CellModel cell);

    /**
     * 设置单元格
     *
     * @param sheetName
     * @param cell
     * @throws IllegalArgumentException sheetName不存在的话会抛出此异常
     */
    void setCell(String sheetName, CellModel cell);

    /**
     * 设置列的默认样式
     *
     * @param sheetIndex
     * @param columnIndex
     * @param styleModel
     * @throws IllegalArgumentException sheetName不存在的话会抛出此异常
     */
    void setDefaultColumnStyle(int sheetIndex, int columnIndex, CellStyleModel styleModel);

    /**
     * 设置列的默认样式
     *
     * @param sheetName
     * @param columnIndex
     * @param styleModel
     * @throws IllegalArgumentException sheetIndex越界会抛出此异常
     */
    void setDefaultColumnStyle(String sheetName, int columnIndex, CellStyleModel styleModel);

}
